universal-mcp-agents 0.1.23rc10__py3-none-any.whl → 0.1.23rc11__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of universal-mcp-agents might be problematic. Click here for more details.
- universal_mcp/agents/base.py +2 -0
- universal_mcp/agents/cli.py +2 -2
- universal_mcp/agents/codeact0/agent.py +3 -3
- universal_mcp/agents/codeact0/prompts.py +8 -10
- universal_mcp/agents/codeact0/tools.py +3 -2
- universal_mcp/agents/codeact0/utils.py +51 -1
- universal_mcp/agents/llm.py +9 -2
- universal_mcp/applications/llm/app.py +4 -4
- {universal_mcp_agents-0.1.23rc10.dist-info → universal_mcp_agents-0.1.23rc11.dist-info}/METADATA +3 -3
- {universal_mcp_agents-0.1.23rc10.dist-info → universal_mcp_agents-0.1.23rc11.dist-info}/RECORD +11 -11
- {universal_mcp_agents-0.1.23rc10.dist-info → universal_mcp_agents-0.1.23rc11.dist-info}/WHEEL +0 -0
universal_mcp/agents/base.py
CHANGED
|
@@ -67,6 +67,8 @@ class BaseAgent:
|
|
|
67
67
|
):
|
|
68
68
|
if event == "messages" and isinstance(meta, (tuple, list)) and len(meta) == 2: # noqa: PLR2004
|
|
69
69
|
payload, meta_dict = meta
|
|
70
|
+
if meta_dict.get("tags") and "quiet" in meta_dict.get("tags"):
|
|
71
|
+
continue
|
|
70
72
|
is_agent_builder = (
|
|
71
73
|
isinstance(meta_dict, dict) and meta_dict.get("langgraph_node") == "agent_builder"
|
|
72
74
|
)
|
universal_mcp/agents/cli.py
CHANGED
|
@@ -18,14 +18,14 @@ app = Typer()
|
|
|
18
18
|
mcp client run --config client_config.json
|
|
19
19
|
""",
|
|
20
20
|
)
|
|
21
|
-
def run(name: str = "
|
|
21
|
+
def run(name: str = "codeact-repl"):
|
|
22
22
|
"""Run the agent CLI"""
|
|
23
23
|
|
|
24
24
|
setup_logger(log_file=None, level="ERROR")
|
|
25
25
|
client = AgentrClient()
|
|
26
26
|
params = {
|
|
27
27
|
"instructions": "You are a helpful assistant",
|
|
28
|
-
"model": "
|
|
28
|
+
"model": "anthropic:claude-4-sonnet-20250514",
|
|
29
29
|
"registry": AgentrRegistry(client=client),
|
|
30
30
|
"memory": MemorySaver(),
|
|
31
31
|
}
|
|
@@ -27,7 +27,7 @@ from universal_mcp.agents.codeact0.tools import (
|
|
|
27
27
|
create_meta_tools,
|
|
28
28
|
enter_agent_builder_mode,
|
|
29
29
|
)
|
|
30
|
-
from universal_mcp.agents.codeact0.utils import build_anthropic_cache_message, get_connected_apps_string
|
|
30
|
+
from universal_mcp.agents.codeact0.utils import build_anthropic_cache_message, get_connected_apps_string, strip_thinking
|
|
31
31
|
from universal_mcp.agents.llm import load_chat_model
|
|
32
32
|
from universal_mcp.agents.utils import convert_tool_ids_to_dict, filter_retry_on, get_message_text
|
|
33
33
|
|
|
@@ -52,7 +52,7 @@ class CodeActPlaybookAgent(BaseAgent):
|
|
|
52
52
|
**kwargs,
|
|
53
53
|
)
|
|
54
54
|
self.model_instance = load_chat_model(model)
|
|
55
|
-
self.agent_builder_model_instance = load_chat_model("anthropic:claude-sonnet-4-5-20250929")
|
|
55
|
+
self.agent_builder_model_instance = load_chat_model("anthropic:claude-sonnet-4-5-20250929", thinking = False)
|
|
56
56
|
self.registry = registry
|
|
57
57
|
self.agent_builder_registry = agent_builder_registry
|
|
58
58
|
self.agent = agent_builder_registry.get_agent() if agent_builder_registry else None
|
|
@@ -217,7 +217,7 @@ class CodeActPlaybookAgent(BaseAgent):
|
|
|
217
217
|
plan_id = str(uuid.uuid4())
|
|
218
218
|
writer({"type": "custom", id: plan_id, "name": "planning", "data": {"update": bool(self.agent)}})
|
|
219
219
|
planning_instructions = self.instructions + AGENT_BUILDER_PLANNING_PROMPT + self.preloaded_defs
|
|
220
|
-
messages = [{"role": "system", "content": planning_instructions}] + state["messages"]
|
|
220
|
+
messages = [{"role": "system", "content": planning_instructions}] + strip_thinking(state["messages"])
|
|
221
221
|
|
|
222
222
|
model_with_structured_output = self.agent_builder_model_instance.with_structured_output(
|
|
223
223
|
AgentBuilderPlan
|
|
@@ -6,13 +6,13 @@ uneditable_prompt = """
|
|
|
6
6
|
You are **Ruzo**, an AI Assistant created by AgentR — a creative, straight-forward, and direct principal software engineer with access to tools.
|
|
7
7
|
|
|
8
8
|
Your job is to answer the user's question or perform the task they ask for.
|
|
9
|
-
- Answer simple questions (which do not require you to write any code or access any external resources) directly. Note that any operation that involves using ONLY print functions should be answered directly in the chat. NEVER write a string yourself and print it.
|
|
9
|
+
- Answer simple questions (which do not require you to write any code or access any external resources) directly. Note that any operation that involves using ONLY print functions should be answered directly in the chat. NEVER write a string or sequences of strings yourself and print it.
|
|
10
10
|
- For task requiring operations or access to external resources, you should achieve the task by executing Python code snippets.
|
|
11
11
|
- You have access to `execute_ipython_cell` tool that allows you to execute Python code in an IPython notebook cell.
|
|
12
|
+
- For writing, text/document generation (like HTML/markdown document generation) or language processing tasks DO NOT answer directly. Instead you MUST use `execute_ipython_cell` tool with the llm functions provided to you for tasks like summarizing, text generation, classification, data extraction from text or unstructured data, etc. Avoid hardcoded approaches to classification, data extraction, or creative writing.
|
|
12
13
|
- You also have access to two tools for finding and loading more python functions- `search_functions` and `load_functions`, which you must use for finding functions for using different external applications or additional functionality.
|
|
13
14
|
- Prioritize connected applications over unconnected ones from the output of `search_functions`. However, if the user specifically asks for an application, you MUST use that irrespective of connection status.
|
|
14
15
|
- When multiple apps are connected, or none of the apps are connected, YOU MUST ask the user to choose the application(s). The search results will inform you when such a case occurs, and you must stop and ask the user if multiple apps are relevant.
|
|
15
|
-
- In writing or natural language processing tasks DO NOT answer directly. Instead use `execute_ipython_cell` tool with the AI functions provided to you for tasks like summarizing, text generation, classification, data extraction from text or unstructured data, etc. Avoid hardcoded approaches to classification, data extraction, or creative writing.
|
|
16
16
|
- The code you write will be executed in a sandbox environment, and you can use the output of previous executions in your code. variables, functions, imports are retained.
|
|
17
17
|
- Read and understand the output of the previous code snippet and use it to answer the user's request. Note that the code output is NOT visible to the user, so after the task is complete, you have to give the output to the user in a markdown format. Similarly, you should only use print/smart_print for your own analysis, the user does not get the output.
|
|
18
18
|
- If needed, feel free to ask for more information from the user (without using the `execute_ipython_cell` tool) to clarify the task.
|
|
@@ -21,14 +21,14 @@ Your job is to answer the user's question or perform the task they ask for.
|
|
|
21
21
|
- The code you write will be executed in a sandbox environment, and you can use the output of previous executions in your code. Variables, functions, imports are retained.
|
|
22
22
|
- Read and understand the output of the previous code snippet and use it to answer the user's request. Note that the code output is NOT visible to the user, so after the task is complete, you have to give the output to the user in a markdown format. Similarly, you should only use print/smart_print for your own analysis, the user does not get the output.
|
|
23
23
|
- If needed, feel free to ask for more information from the user (without using the `execute_ipython_cell` tool) to clarify the task.
|
|
24
|
-
-
|
|
25
|
-
-
|
|
24
|
+
- DO NOT use the code execution to communicate/show anything to the user. The user is not able to see the output of the code cells, it is only for your processing and actions.
|
|
25
|
+
- Whenever you need to generate a large body of text, such as a document, an HTML file, or a report, use llm functions and save the output file using save functions. Do not generate text yourself and do not print the entire text in order to save your memory.
|
|
26
26
|
|
|
27
27
|
**Coding Best Practices:**
|
|
28
|
-
-
|
|
28
|
+
- Structure your code into multiple small, well-defined functions within a single execution snippet. This ensures modularity and makes it easier to debug or update specific logic without rewriting or re-executing large portions of code. You can only rewrite the function/portion that you need to edit since the others are retained in context.
|
|
29
|
+
- Variables, functions, classes defined at the top level of previous code snippets can be referenced in your code.
|
|
29
30
|
- External functions which return a dict or list[dict] are ambiguous. Therefore, you MUST explore the structure of the returned data using `smart_print()` statements before using it, printing keys and values. `smart_print` truncates long strings from data, preventing huge output logs.
|
|
30
31
|
- When an operation involves running a fixed set of steps on a list of items, run one run correctly and then use a for loop to run the steps on each item in the list.
|
|
31
|
-
- In a single code snippet, try to achieve as much as possible.
|
|
32
32
|
- You can only import libraries that come pre-installed with Python. However, do consider searching for external functions first, using the search and load tools to access them in the code.
|
|
33
33
|
- For displaying final results to the user, you must present your output in markdown format, including image links, so that they are rendered and displayed to the user. The code output is NOT visible to the user.
|
|
34
34
|
- Call all functions using keyword arguments only, never positional arguments.
|
|
@@ -39,7 +39,7 @@ Your job is to answer the user's question or perform the task they ask for.
|
|
|
39
39
|
- Anything that's just formatted print statements
|
|
40
40
|
|
|
41
41
|
**Final Output Requirements:**
|
|
42
|
-
- Once you have all the information about the task, return the text directly to user in markdown format. Do NOT call `execute_ipython_cell` again just for summarization.
|
|
42
|
+
- Once you have all the information about the task, return the text directly to user in markdown format. Do NOT call `execute_ipython_cell` or any LLM tools again just for summarization. Do NOT use llm__generate_text for this purpose.
|
|
43
43
|
- Always respond in github flavoured markdown format.
|
|
44
44
|
- For charts and diagrams, use mermaid chart in markdown directly.
|
|
45
45
|
- Your final response should contain the complete answer to the user's request in a clear, well-formatted manner that directly addresses what they asked for.
|
|
@@ -209,9 +209,7 @@ def create_default_prompt(
|
|
|
209
209
|
system_prompt = uneditable_prompt.strip()
|
|
210
210
|
if apps_string:
|
|
211
211
|
system_prompt += f"\n\n**Connected external applications (These apps have been logged into by the user):**\n{apps_string}\n\n Use `search_functions` to search for functions you can perform using the above. You can also discover more applications using the `search_functions` tool to find additional tools and integrations, if required. However, you MUST not assume the application when multiple apps are connected for a particular usecase.\n"
|
|
212
|
-
system_prompt +=
|
|
213
|
-
"\n\nIn addition to the Python Standard Library, you can use the following external functions:\n"
|
|
214
|
-
)
|
|
212
|
+
system_prompt += "\n\nIn addition to the Python Standard Library, you can use the following external functions:\n Carefully note which functions are normal and which functions are async. CRITICAL: Use `await` with async functions and async functions ONLY."
|
|
215
213
|
else:
|
|
216
214
|
system_prompt = ""
|
|
217
215
|
|
|
@@ -320,7 +320,8 @@ def create_meta_tools(tool_registry: AgentrRegistry) -> dict[str, Any]:
|
|
|
320
320
|
valid_tools, unconnected_links = await get_valid_tools(tool_ids=tool_ids, registry=tool_registry)
|
|
321
321
|
|
|
322
322
|
if not valid_tools:
|
|
323
|
-
|
|
323
|
+
response_string = "Error: None of the provided tool IDs could be validated or loaded."
|
|
324
|
+
return response_string, {}, [], ""
|
|
324
325
|
|
|
325
326
|
# Step 2: Export the schemas of the valid tools.
|
|
326
327
|
await tool_registry.load_tools(valid_tools)
|
|
@@ -502,7 +503,7 @@ async def get_valid_tools(tool_ids: list[str], registry: AgentrRegistry) -> tupl
|
|
|
502
503
|
start = text.find(":") + 1
|
|
503
504
|
end = text.find(". R", start)
|
|
504
505
|
url = text[start:end].strip()
|
|
505
|
-
markdown_link = f"[{app}]({url})"
|
|
506
|
+
markdown_link = f""
|
|
506
507
|
unconnected_links.append(markdown_link)
|
|
507
508
|
for tool_id, tool_name in tool_entries:
|
|
508
509
|
if tool_name in available:
|
|
@@ -4,7 +4,7 @@ import re
|
|
|
4
4
|
from collections.abc import Sequence
|
|
5
5
|
from typing import Any
|
|
6
6
|
|
|
7
|
-
from langchain_core.messages import BaseMessage
|
|
7
|
+
from langchain_core.messages import AIMessage, BaseMessage
|
|
8
8
|
from universal_mcp.types import ToolConfig
|
|
9
9
|
|
|
10
10
|
MAX_CHARS = 5000
|
|
@@ -29,6 +29,56 @@ def build_anthropic_cache_message(text: str, role: str = "system", ttl: str = "1
|
|
|
29
29
|
}
|
|
30
30
|
]
|
|
31
31
|
|
|
32
|
+
def strip_thinking(messages: list[BaseMessage]):
|
|
33
|
+
"""Remove Anthropic 'thinking' segments from the most recent AIMessage in-place.
|
|
34
|
+
|
|
35
|
+
Scans from the end to find the last AIMessage, then removes thinking blocks
|
|
36
|
+
from its content. Handles both plain-string and block-array content.
|
|
37
|
+
"""
|
|
38
|
+
if not messages:
|
|
39
|
+
return messages
|
|
40
|
+
|
|
41
|
+
# Find the last AIMessage from the end
|
|
42
|
+
last_ai_index = None
|
|
43
|
+
for i in range(len(messages) - 1, -1, -1):
|
|
44
|
+
if isinstance(messages[i], AIMessage):
|
|
45
|
+
last_ai_index = i
|
|
46
|
+
break
|
|
47
|
+
|
|
48
|
+
if last_ai_index is None:
|
|
49
|
+
return messages
|
|
50
|
+
|
|
51
|
+
ai_msg = messages[last_ai_index]
|
|
52
|
+
content = ai_msg.content
|
|
53
|
+
|
|
54
|
+
# If it's already plain text, nothing to strip
|
|
55
|
+
if isinstance(content, str):
|
|
56
|
+
return messages
|
|
57
|
+
|
|
58
|
+
# If Anthropic-style content blocks
|
|
59
|
+
if isinstance(content, list):
|
|
60
|
+
filtered_output: list[object] = []
|
|
61
|
+
removed_any = False
|
|
62
|
+
for b in content:
|
|
63
|
+
is_thinking = False
|
|
64
|
+
if isinstance(b, dict):
|
|
65
|
+
t = b.get("type")
|
|
66
|
+
if t == "thinking":
|
|
67
|
+
is_thinking = True
|
|
68
|
+
elif "thinking" in b and isinstance(b["thinking"], str):
|
|
69
|
+
is_thinking = True
|
|
70
|
+
|
|
71
|
+
if is_thinking:
|
|
72
|
+
removed_any = True
|
|
73
|
+
continue
|
|
74
|
+
filtered_output.append(b)
|
|
75
|
+
|
|
76
|
+
if removed_any:
|
|
77
|
+
ai_msg.content = filtered_output
|
|
78
|
+
messages[last_ai_index] = ai_msg
|
|
79
|
+
|
|
80
|
+
return messages
|
|
81
|
+
|
|
32
82
|
|
|
33
83
|
def add_tools(tool_config: ToolConfig, tools_to_add: ToolConfig):
|
|
34
84
|
for app_id, new_tools in tools_to_add.items():
|
universal_mcp/agents/llm.py
CHANGED
|
@@ -9,22 +9,28 @@ from loguru import logger
|
|
|
9
9
|
|
|
10
10
|
@lru_cache(maxsize=8)
|
|
11
11
|
def load_chat_model(
|
|
12
|
-
fully_specified_name: str, temperature: float = 1.0, tags:
|
|
12
|
+
fully_specified_name: str, temperature: float = 1.0, tags: tuple[str, ...] | None = None, thinking: bool = True, disable_streaming: bool = False
|
|
13
13
|
) -> BaseChatModel:
|
|
14
14
|
"""Load a chat model from a fully specified name.
|
|
15
15
|
Args:
|
|
16
16
|
fully_specified_name (str): String in the format 'provider/model'.
|
|
17
17
|
"""
|
|
18
18
|
fully_specified_name = fully_specified_name.replace("/", ":")
|
|
19
|
+
if tags:
|
|
20
|
+
if isinstance(tags, str):
|
|
21
|
+
tags = [tags]
|
|
22
|
+
else:
|
|
23
|
+
tags = list[str](tags)
|
|
19
24
|
provider, model = fully_specified_name.split(":", maxsplit=1)
|
|
20
25
|
if provider == "anthropic":
|
|
21
26
|
return ChatAnthropic(
|
|
22
27
|
model=model,
|
|
23
28
|
temperature=temperature,
|
|
24
29
|
thinking={"type": "enabled", "budget_tokens": 2048} if thinking else None,
|
|
25
|
-
max_tokens=
|
|
30
|
+
max_tokens=8096,
|
|
26
31
|
tags=tags,
|
|
27
32
|
stream_usage=True,
|
|
33
|
+
disable_streaming = disable_streaming
|
|
28
34
|
) # pyright: ignore[reportCallIssue]
|
|
29
35
|
elif provider == "azure":
|
|
30
36
|
return AzureChatOpenAI(
|
|
@@ -34,6 +40,7 @@ def load_chat_model(
|
|
|
34
40
|
temperature=temperature,
|
|
35
41
|
tags=tags,
|
|
36
42
|
stream_usage=True,
|
|
43
|
+
disable_streaming = disable_streaming
|
|
37
44
|
)
|
|
38
45
|
elif provider == "gemini":
|
|
39
46
|
return ChatGoogleGenerativeAI(model=model, temperature=temperature)
|
|
@@ -91,7 +91,7 @@ class LlmApp(BaseApplication):
|
|
|
91
91
|
|
|
92
92
|
full_prompt = f"{prompt}\n\nContext:\n{context_str}\n\n"
|
|
93
93
|
|
|
94
|
-
model = load_chat_model("azure/gpt-5-mini")
|
|
94
|
+
model = load_chat_model("azure/gpt-5-mini", disable_streaming = True, tags=("quiet",))
|
|
95
95
|
response = model.with_retry(stop_after_attempt=MAX_RETRIES).invoke(full_prompt, stream=False)
|
|
96
96
|
return str(response.content)
|
|
97
97
|
|
|
@@ -158,7 +158,7 @@ class LlmApp(BaseApplication):
|
|
|
158
158
|
reason: str = Field(..., description="The reasoning behind the classification.")
|
|
159
159
|
top_class: str = Field(..., description="The class with the highest probability.")
|
|
160
160
|
|
|
161
|
-
model = load_chat_model("azure/gpt-5-mini", temperature=0)
|
|
161
|
+
model = load_chat_model("azure/gpt-5-mini", temperature=0, disable_streaming = True, tags=("quiet",))
|
|
162
162
|
agent = create_agent(
|
|
163
163
|
model=model,
|
|
164
164
|
tools=[],
|
|
@@ -229,7 +229,7 @@ class LlmApp(BaseApplication):
|
|
|
229
229
|
"Return ONLY a valid JSON object that conforms to the provided schema, with no extra text."
|
|
230
230
|
)
|
|
231
231
|
|
|
232
|
-
model = load_chat_model("azure/gpt-5-mini", temperature=0)
|
|
232
|
+
model = load_chat_model("azure/gpt-5-mini", temperature=0, disable_streaming = True, tags=("quiet",))
|
|
233
233
|
|
|
234
234
|
response = (
|
|
235
235
|
model.with_structured_output(schema=output_schema, method="json_mode")
|
|
@@ -282,7 +282,7 @@ class LlmApp(BaseApplication):
|
|
|
282
282
|
|
|
283
283
|
prompt = f"{task_instructions}\n\nContext:\n{context_str}\n\nReturn ONLY a valid JSON object, no extra text."
|
|
284
284
|
|
|
285
|
-
model = load_chat_model("azure/gpt-5-mini", temperature=0)
|
|
285
|
+
model = load_chat_model("azure/gpt-5-mini", temperature=0, disable_streaming = True, tags=("quiet",))
|
|
286
286
|
|
|
287
287
|
agent = create_agent(
|
|
288
288
|
model=model,
|
{universal_mcp_agents-0.1.23rc10.dist-info → universal_mcp_agents-0.1.23rc11.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: universal-mcp-agents
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.23rc11
|
|
4
4
|
Summary: Add your description here
|
|
5
5
|
Project-URL: Homepage, https://github.com/universal-mcp/applications
|
|
6
6
|
Project-URL: Repository, https://github.com/universal-mcp/applications
|
|
@@ -12,8 +12,8 @@ Requires-Dist: langchain-anthropic>=0.3.19
|
|
|
12
12
|
Requires-Dist: langchain-google-genai>=2.1.10
|
|
13
13
|
Requires-Dist: langchain-openai>=0.3.32
|
|
14
14
|
Requires-Dist: langgraph>=0.6.6
|
|
15
|
-
Requires-Dist: universal-mcp-applications>=0.1.
|
|
16
|
-
Requires-Dist: universal-mcp>=0.1.
|
|
15
|
+
Requires-Dist: universal-mcp-applications>=0.1.30
|
|
16
|
+
Requires-Dist: universal-mcp>=0.1.24rc29
|
|
17
17
|
Provides-Extra: dev
|
|
18
18
|
Requires-Dist: pre-commit; extra == 'dev'
|
|
19
19
|
Requires-Dist: ruff; extra == 'dev'
|
{universal_mcp_agents-0.1.23rc10.dist-info → universal_mcp_agents-0.1.23rc11.dist-info}/RECORD
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
universal_mcp/agents/__init__.py,sha256=Ythw8tyq7p-w1SPnuO2JtS4TvYEP75PkQpdyvZv-ww4,914
|
|
2
|
-
universal_mcp/agents/base.py,sha256=
|
|
3
|
-
universal_mcp/agents/cli.py,sha256=
|
|
2
|
+
universal_mcp/agents/base.py,sha256=HkTQzh8EudkG4_5teiD0aDidWpfp2obOz0XR9XsZeUI,7949
|
|
3
|
+
universal_mcp/agents/cli.py,sha256=d3O5BxkT4axHcKnL7gM1SvneWoZMh1QQoElk03KeuU4,950
|
|
4
4
|
universal_mcp/agents/hil.py,sha256=_5PCK6q0goGm8qylJq44aSp2MadP-yCPvhOJYKqWLMo,3808
|
|
5
|
-
universal_mcp/agents/llm.py,sha256=
|
|
5
|
+
universal_mcp/agents/llm.py,sha256=AOijT3hCt3VId97FnvARsPG9lx0sLmn-yiUo8Qx90lQ,2043
|
|
6
6
|
universal_mcp/agents/react.py,sha256=ocYm94HOiJVI2zwTjO1K2PNfVY7EILLJ6cd__jnGHPs,3327
|
|
7
7
|
universal_mcp/agents/sandbox.py,sha256=YxTGp_zsajuN7FUn0Q4PFjuXczgLht7oKql_gyb2Gf4,5112
|
|
8
8
|
universal_mcp/agents/simple.py,sha256=NSATg5TWzsRNS7V3LFiDG28WSOCIwCdcC1g7NRwg2nM,2095
|
|
@@ -22,23 +22,23 @@ universal_mcp/agents/builder/prompts.py,sha256=8Xs6uzTUHguDRngVMLak3lkXFkk2VV_uQ
|
|
|
22
22
|
universal_mcp/agents/builder/state.py,sha256=7DeWllxfN-yD6cd9wJ3KIgjO8TctkJvVjAbZT8W_zqk,922
|
|
23
23
|
universal_mcp/agents/codeact0/__init__.py,sha256=8-fvUo1Sm6dURGI-lW-X3Kd78LqySYbb5NMkNJ4NDwg,76
|
|
24
24
|
universal_mcp/agents/codeact0/__main__.py,sha256=YyIoecUcKVUhTcCACzLlSmYrayMDsdwzDEqaV4VV4CE,766
|
|
25
|
-
universal_mcp/agents/codeact0/agent.py,sha256=
|
|
25
|
+
universal_mcp/agents/codeact0/agent.py,sha256=Hwp7awECd6DPYL39LzGFrsqTkV0uCXWuVEJ_dUHxB-0,23499
|
|
26
26
|
universal_mcp/agents/codeact0/config.py,sha256=H-1woj_nhSDwf15F63WYn723y4qlRefXzGxuH81uYF0,2215
|
|
27
27
|
universal_mcp/agents/codeact0/langgraph_agent.py,sha256=8nz2wq-LexImx-l1y9_f81fK72IQetnCeljwgnduNGY,420
|
|
28
28
|
universal_mcp/agents/codeact0/llm_tool.py,sha256=-pAz04OrbZ_dJ2ueysT1qZd02DrbLY4EbU0tiuF_UNU,798
|
|
29
|
-
universal_mcp/agents/codeact0/prompts.py,sha256=
|
|
29
|
+
universal_mcp/agents/codeact0/prompts.py,sha256=02VAmWca0rirdE1d-gBZgKIw4Jg20eciJ9jppyNbFzI,16250
|
|
30
30
|
universal_mcp/agents/codeact0/sandbox.py,sha256=Zcr7fvYtcGbwNWd7RPV7-Btl2HtycPIPofEGVmzxSmE,4696
|
|
31
31
|
universal_mcp/agents/codeact0/state.py,sha256=cf-94hfVub-HSQJk6b7_SzqBS-oxMABjFa8jqyjdDK0,1925
|
|
32
|
-
universal_mcp/agents/codeact0/tools.py,sha256=
|
|
33
|
-
universal_mcp/agents/codeact0/utils.py,sha256=
|
|
32
|
+
universal_mcp/agents/codeact0/tools.py,sha256=Kr8FZ8DyrUhxekbW52bhY-y2EzCj1hzsvWOeyKfB_5Q,23265
|
|
33
|
+
universal_mcp/agents/codeact0/utils.py,sha256=eOdqemLx6RqI5g--vtM9WP2LHrYXro2bxScNAVUU0Do,19683
|
|
34
34
|
universal_mcp/agents/shared/__main__.py,sha256=XxH5qGDpgFWfq7fwQfgKULXGiUgeTp_YKfcxftuVZq8,1452
|
|
35
35
|
universal_mcp/agents/shared/prompts.py,sha256=yjP3zbbuKi87qCj21qwTTicz8TqtkKgnyGSeEjMu3ho,3761
|
|
36
36
|
universal_mcp/agents/shared/tool_node.py,sha256=DC9F-Ri28Pam0u3sXWNODVgmj9PtAEUb5qP1qOoGgfs,9169
|
|
37
37
|
universal_mcp/applications/filesystem/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
38
38
|
universal_mcp/applications/filesystem/app.py,sha256=0TRjjm8YnslVRSmfkXI7qQOAlqWlD1eEn8Jm0xBeigs,5561
|
|
39
39
|
universal_mcp/applications/llm/__init__.py,sha256=_XGRxN3O1--ZS5joAsPf8IlI9Qa6negsJrwJ5VJXno0,46
|
|
40
|
-
universal_mcp/applications/llm/app.py,sha256=
|
|
40
|
+
universal_mcp/applications/llm/app.py,sha256=2BIH6JDqw6LPD9Iuo3_LoXa48813o6G4gmeRBR_v9oc,12933
|
|
41
41
|
universal_mcp/applications/ui/app.py,sha256=c7OkZsO2fRtndgAzAQbKu-1xXRuRp9Kjgml57YD2NR4,9459
|
|
42
|
-
universal_mcp_agents-0.1.
|
|
43
|
-
universal_mcp_agents-0.1.
|
|
44
|
-
universal_mcp_agents-0.1.
|
|
42
|
+
universal_mcp_agents-0.1.23rc11.dist-info/METADATA,sha256=-nhuSFRtXvQJz1HSDb-QxTFAMH399Ve8tYVAqIhLM9c,932
|
|
43
|
+
universal_mcp_agents-0.1.23rc11.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
44
|
+
universal_mcp_agents-0.1.23rc11.dist-info/RECORD,,
|
{universal_mcp_agents-0.1.23rc10.dist-info → universal_mcp_agents-0.1.23rc11.dist-info}/WHEEL
RENAMED
|
File without changes
|